/**
 * @类名称:SendMsgService.java
 * @时间:2017年6月29日上午9:53:01
 * @作者:THINK 
 * @版权:公司版权 Copyright (c) 2017 
 */
package cn.vcjf.weapp.common.sms;


import cn.vcjf.weapp.common.sms.httpclient.SDKHttpClient;
import cn.vcjf.weapp.common.util.CacheUtils;
import cn.vcjf.weapp.common.util.StringUtil;
import cn.vcjf.weapp.common.web.TableResult;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.net.URLEncoder;

/**
 * @描述:TODO
 * @作者:THINK 
 * @时间:2017年6月29日 上午9:53:01 
 */
@Service
@Transactional(readOnly = true)
public class SendMsgService {

	/**
	 * 日志对象
	 */
	protected Logger logger = LogManager.getLogger(SendMsgService.class);
	
	public static String sn = "9SDK-EMY-0540-SDSQK";// 软件序列号,请通过亿美销售人员获取
	public static String key = "409911";// 序列号首次激活时自己设定
	public static String password = "409911";// 密码,请通过亿美销售人员获取
//	public static String baseUrl = "http://sdk540ws.eucp.b2m.cn:8080/sdkproxy/"; //需要白名单
	public static String baseUrl = "http://sdk229ws.eucp.b2m.cn:8080/sdkproxy/";

	public int count = 2;//重发次数
	//短信验证开关
	@Value("${vc.sms.switch}")
    private Boolean smsSwitch;

	@Value("${APP_NAME}")
    private String appName;

	/**
	 * @描述:异步发送短信
	 * @作者:lihai 
	 * @时间:2017年6月7日 下午10:30:22
	 */
	public TableResult sendmsg(String phoneNo, String msg){
		if(!smsSwitch){
            return TableResult.OKResult("发送短信成功！");
        }
		if(count==0){
			logger.error("【重发短信，发送短信失败，系统异常】");
            return TableResult.ErrorResult("重发短信失败，系统异常");
		}
		try {
			if(StringUtils.isNotEmpty(phoneNo)){
				logger.info("---"+appName+"前台：发送短信：手机号为："+phoneNo+";短信为："+msg+"---");
				String smsContent="【"+appName+"】"+msg;
				smsContent = URLEncoder.encode(smsContent, "UTF-8");
				long seqId = System.currentTimeMillis();
				String param = "cdkey=" + sn + "&password=" + key + "&phone=" + phoneNo + "&message=" + smsContent + "&addserial=&seqid=" + seqId;
				String url = baseUrl + "sendsms.action";
				String ret = SDKHttpClient.sendSMS(url, param);

				if(!"0".equals(ret)){
					return TableResult.ErrorResult("发送短信异常");
				}else{
					return TableResult.OKResult("发送成功！");
				}
			}else{
				return TableResult.ErrorResult("手机号不能为空");
			}
		}catch (Exception e){
			logger.info("---发送失败，系统异常：手机号为："+phoneNo+";---");
			count--;
			sendmsg(phoneNo,msg);
		}
		return TableResult.ErrorResult("发送失败，系统异常");
		
	}/**
	 * @描述:异步发送短信
	 */
	public TableResult sendCustomMsg(String phoneNo, String msg){
		if(!smsSwitch){
            return TableResult.OKResult("发送短信成功！");
        }
		if(count==0){
			logger.error("【重发短信，发送短信失败，系统异常】");
            return TableResult.ErrorResult("重发短信失败，系统异常");
		}
		try {
			if(StringUtils.isNotEmpty(phoneNo)){
				logger.info("---"+appName+"前台：发送短信：手机号为："+phoneNo+";短信为："+msg+"---");
				String smsContent="【"+appName+"】"+msg;
				smsContent = URLEncoder.encode(smsContent, "UTF-8");
				long seqId = System.currentTimeMillis();
				String param = "cdkey=" + sn + "&password=" + key + "&phone=" + phoneNo + "&message=" + smsContent + "&addserial=&seqid=" + seqId;
				String url = baseUrl + "sendsms.action";
				String ret = SDKHttpClient.sendSMS(url, param);
				if(!"0".equals(ret)){
					return TableResult.ErrorResult("发送短信异常");
				}else{
					return TableResult.OKResult("发送成功！");
				}
			}else{
				return TableResult.ErrorResult("手机号不能为空");
			}
		}catch (Exception e){
			logger.info("---发送失败，系统异常：手机号为："+phoneNo+";---");
			count--;
			sendmsg(phoneNo,msg);
		}
		return TableResult.ErrorResult("发送失败，系统异常");

	}
	/**
	 * 发送验证码
	 * @param phoneNo
	 * @param CacheName
	 * @return
	 */
	public TableResult sendCodeCache(String phoneNo, String CacheName){
		String code = StringUtil.getRandNum();
		String smsContent = "您的验证码是"+code+"，3分钟内有效。";
		TableResult result = sendmsg(phoneNo,smsContent);
		if(result.OK()){
			CacheUtils.put(CacheName,phoneNo,code);
		}
		return TableResult.ErrorResult("重发短信失败，系统异常");
	}
	/**
	 * 发送自定义验证码
	 * @param phoneNo
	 * @param CacheName
	 * @return
	 */
	public TableResult sendCustomCodeCache(String phoneNo, String CacheName){
		String code = StringUtil.getRandNum();
		String smsContent = "您的验证码是"+code+"，3分钟内有效。";
		TableResult result  = sendCustomMsg(phoneNo,smsContent);
		if(result.OK()){
			CacheUtils.put(CacheName,phoneNo,code);
			result.setData(code);
			return result;
		}
		return TableResult.ErrorResult("重发短信失败，系统异常");
	}
}

